package com.ty.controller;

import com.ty.bean.Message;
import com.ty.mvc.ResponseBody;
import com.ty.service.BaseAdminService;
import com.ty.service.impl.BaseAdminServiceImpl;
import com.ty.util.JSONUtil;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Date;

/**
 * @author 田野
 */
public class AdminController {

    private BaseAdminService service = new BaseAdminServiceImpl();
    private Message message = null;

    @ResponseBody("/admin/login.do")
    public String login(HttpServletRequest request, HttpServletResponse response){
        // 逻辑是：在login.html中输入账号和密码之后点击提交，就会执行js代码，
        // 然后根据post提交的地址就会和这个方法对应上，这是通过注解实现的，
        // 而此时的post中的数据就存在于request中，
        // post请求的参数会被封装到Http请求头中，而get请求的参数就直接会暴露在浏览器地址栏上

        // 下面是后端操作的固定流程：
        // 1、接收参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 2、调用service层方法传参数并获取结果
        boolean result = service.login(username, password);
        // 3、根据结果向前台(ajax)返回数据和响应，之前接触的是需要存值以及跳转但是现在变了一下
        // 3、根据不同的结果准备不同的数据
        if (result){
            message = new Message("登录成功",0);
            // 登录成功时就需要进行登录信息的更新(时间和IP)
            Date date = new Date();
            // 请求对象request封装的就是请求信息，就是Http协议的请求信息，
            // 不管是对方的IP还是其他信息，更甚的是操作系统，
            // 在这个封装Http协议的请求对象中都能获取到
            String ip = request.getRemoteAddr();
            service.updateLoginMsg(username, date, ip);
            HttpSession session = request.getSession();
            // 存session和cookie
            session.setAttribute("admin",username);
            Cookie cookie = new Cookie("username", username);
            // 很重要，可以有很多的cookie，也就是cookies
            cookie.setPath("/");
            response.addCookie(cookie);

        }else {
            message = new Message("登录失败", -1);
        }
        // 4、将数据转换成JSON
        // 例如登录成功就是：{result:"登录成功",status:0}
        String json = JSONUtil.toJSON(message);
        // 5、返回JSON给ajax
        return json;
    }

    @ResponseBody("/admin/logout.do")
    public String logout(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        session.removeAttribute("admin");
        session.invalidate();
        Message message = new Message();
        message.setStatus(0);
        message.setResult("退出成功！");
        String json = JSONUtil.toJSON(message);
        return json;
    }


}
